{
struct xenstore_domain_interface *intf = xenstore_domain_interface();
XENSTORE_RING_IDX cons, prod;
+ int rc;
while (len != 0) {
void *dst;
unsigned int avail;
- wait_event_interruptible(xb_waitq,
- (intf->req_prod - intf->req_cons) !=
- XENSTORE_RING_SIZE);
+ rc = wait_event_interruptible(
+ xb_waitq,
+ (intf->req_prod - intf->req_cons) !=
+ XENSTORE_RING_SIZE);
+ if (rc < 0)
+ return rc;
/* Read indexes, then verify. */
cons = intf->req_cons;
{
struct xenstore_domain_interface *intf = xenstore_domain_interface();
XENSTORE_RING_IDX cons, prod;
+ int rc;
while (len != 0) {
unsigned int avail;
const char *src;
- wait_event_interruptible(xb_waitq,
- intf->rsp_cons != intf->rsp_prod);
+ rc = wait_event_interruptible(
+ xb_waitq,
+ intf->rsp_cons != intf->rsp_prod);
+ if (rc < 0)
+ return rc;
/* Read indexes, then verify. */
cons = intf->rsp_cons;
while (list_empty(&xs_state.reply_list)) {
spin_unlock(&xs_state.reply_lock);
- wait_event_interruptible(xs_state.reply_waitq,
- !list_empty(&xs_state.reply_list));
+ /* XXX FIXME: Avoid synchronous wait for response here. */
+ wait_event(xs_state.reply_waitq,
+ !list_empty(&xs_state.reply_list));
spin_lock(&xs_state.reply_lock);
}
wait_event_interruptible(watch_events_waitq,
!list_empty(&watch_events));
+ if (kthread_should_stop())
+ break;
+
down(&xenwatch_mutex);
spin_lock(&watch_events_lock);
up(&xenwatch_mutex);
}
+
+ return 0;
}
static int process_msg(void)
if (err)
printk(KERN_WARNING "XENBUS error %d while reading "
"message\n", err);
+ if (kthread_should_stop())
+ break;
}
+
+ return 0;
}
int xs_init(void)